package com.zrrd.learn.chapter05;

import java.util.Arrays;

/**
 * 多数组问题2
 *
 * @author asus
 * @version 1.0
 * @date 2023/7/11 15:06
 */
public class LearnArray02 {
    //4 : a : [1，2,3,4] b : [2,3,4,5]  左差集 以左而的为主 a为主 找a里面不在b里面

    public static void question4_1(int[] arr1,int[] arr2){
        for (int i = 0,max=arr1.length; i < max; i++) {
        boolean t =false;

            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i] == arr2[j]) {
                    t = true;
                    break;
                }
            }
            if(!t){
                System.out.println(arr1[i]);
        }

                }
//        public static void question4_1(int[] master, int[] slave) {
//            //4 重复上面的操作
//            for (int x = 0; x < master.length; x++) {
//                //1 从主数组里拿到一个数
//                int temp = master[x];
//                //2 与从数组里面全部都比较一下
//                boolean ist = true;
//                for (int i = 0; i < slave.length; i++) {
//                    if (slave[i] == temp) {
//                        ist = false;
//                        break;
//                    }
//                }
//                //3 当所有的都不相同的时候这个就是我们要的差数
//                if (ist) {
//                    System.out.printf("这是一个差数%d", temp);
//                }
//            }
//        }


            }


//    右

    public static void question4_2(int[] arr1,int[] arr2){
        for (int i = 0,max=arr2.length; i < max; i++) {
            boolean t =false;

            for (int j = 0; j < arr1.length; j++) {
                if (arr2[i] == arr1[j]) {
                    t = true;
                    break;
                }
            }
            if(!t){
                System.out.println(arr2[i]);
            }

        }
//        public static void question4_2(int[] slave,int[] master) {
//            question4_1(master,slave);
//        }

    }
    public static void question4_3(int[] arr1,int[] arr2){
        question4_1(arr1,arr2);
        question4_2(arr1,arr2);
    }
    /**
     * 全部
     *         5 : a : {1,1,1,2,3,4,5,1,2,3,4,7,6} 每一个元素出现的次数 (只有一次的数)
     */

            public static void question5_1(int[] arr){
                for (int j = 0; j < arr.length - 1; j++) {
                    for (int i = 0; i < arr.length - 1 - j; i++) {
                        if (arr[i] > arr[i + 1]) {
                            //swap
                            arr[i] = arr[i] + arr[i + 1];
                            arr[i + 1] = arr[i] - arr[i + 1];
                            arr[i] = arr[i] - arr[i + 1];
                        }
                    }
                }
                System.out.println(Arrays.toString(arr));
                int num;
                for(int a=0;a<arr.length;a++){
                    for(int b=0;b< arr.length+1;b++){
                        if(a>b){
                            break;
                        }
                        if(b==arr.length){
                            num=arr.length-a;
                            System.out.println(arr[a] + "的个数是" + num);
                            return;
                        }
                        if(arr[a] != arr[b]){
                            num=b-a;
                            System.out.println(arr[a] + "的个数是" + num);
                            a=b;
                        }
                    }
                }

        }





//    public static void question5(int[] array) {
//        //1 : 先排序
//        Arrays.sort(array);
//        //2 : 先来一次输出
//        System.out.println(Arrays.toString(array));
//
//        //3。 先拿到第一个
//        for (int i = 0; i < array.length; i++) {
//            int num = 0;
//            for(int j = i;j < array.length;j++){
//                if(array[i] != array[j]){
//                    num = j;
//                    break;
//                }
//            }
//
//               System.out.printf("当前数组里的%d,有多少%d个\n",array[i],num == 0 ? 1 : num-i);
//            i = (num == 0) ? i : num-1;
//        }
//
//    }

        public static void question5(int[] array) {
            //1 : 先排序
            Arrays.sort(array);
//                //容错
//            if(!(1<=array[].val<=5)){
//
//            }

            //2 : 先来一次输出
            System.out.println(Arrays.toString(array));
            //3。 先拿到第一个
            for (int i = 0; i < array.length; i++) {
                int num = 0;
                for (int j = i; j < array.length; j++) {
                    if (array[i] != array[j]) {
                        num = j;
                        break;
                    }
                }

                System.out.printf("当前数组里的%d,有多少%d个\n", array[i], num == 0 ? array.length - i : num - i);
                i = (num == 0) ? array.length - 1 : num - 1;
            }

        }






    public static void main(String[] args) {
                int[] arr1={1,2,3,4};
                int[] arr2={2,3,4,5};
               question4_1(arr1,arr2);
                System.out.println("------");
                question4_2(arr1,arr2);
                System.out.println("------");
                question4_3(arr1,arr2);
                int[] arr = {11,11,11,2,3,4,5,11,11,2,3,4,7,6};
                question5(arr);
    }

}
